package spring.boot.btc.model;

import lombok.Data;
import spring.boot.btc.utils.HashUtils;

/**
 * 区块
 */
@Data
public class Block {


    /**
     * 当前区块hash（header中所有属性加起来的hash）
     */
    private String hash;

    /*=========以下属性为区块header==========================================================*/

    /**
     * 上一个区块hash（创世区块值为0）
     */
    private String preHash;

    /**
     * 防篡改hash（Transaction中的hash）
     */
    private String merkelHash;

    /**
     * 区块版本
     */
    private long version;

    /**
     * 打包区块的时间戳
     */
    private long timestamp;

    /**
     * 工作量证明（本次区块计算的次数）
     */
    private long nonce;

    /*=========以下属性为区块body==========================================================*/

    /**
     * 本次区块交易
     */
    private Transaction transaction;

    public Block() {
    }

    public Block(String preHash, long version, long nonce, Transaction transaction,long timestamp) {
        this.preHash = preHash;
        this.version = version;
        this.timestamp = timestamp;
        this.nonce = nonce;
        this.transaction = transaction;
        this.merkelHash = transaction.getHash();
        initHash();
    }


    private void initHash() {
        StringBuilder sb = new StringBuilder();
        sb.append(preHash);
        sb.append(merkelHash);
        sb.append(version);
        sb.append(timestamp);
        sb.append(nonce);
        this.hash = HashUtils.sha256(sb.toString());
    }

}
